import {useUserStore} from "@/store/index.js";

/**
 * @description 封装统一公共接口参数方法
 * @param version 版本号
 * @param method 方法
 * @param param 参数
 * @returns {{method, param, jsonrpc: string, tags: {usertoken: UnwrapRef<string>, userid: UnwrapRef<string>}}}
 */
export function apiParam(version = "2.0", method, param) {
  const userStore = useUserStore();
  return {
    jsonrpc: version,
    method: method,
    params: param,
    tags: {
      userid: userStore.userid,
      usertoken: userStore.usertoken,
    },
  }
}

/**
 * @description 将Excel数组转为对象格式
 * @param array 数组
 * @returns {*} 对象 --> [[]] --> [{}]
 */
export const arrayChangeObject = (array) => {
  // 直接通过map返回最新数组
  return array.slice(1).map((item) => {
    const keys = array[0];
    const obj = {};
    for (let i = 0; i < keys.length; i++) {
      obj[keys[i]] = item[i];
    }
    // 返回当前对象
    return obj;
  });
};

/**
 * @description 处理中文key
 * @param data 列表
 * @param relation 字段
 * @returns {*[]}
 */
export const deal_chinese_key = (data, relation) => {
  let result = [];
  for (let i = 0; i < data.length; i++) {
    let temp = {};
    for (let key in data[i]) {
      if (key in relation) {
        temp[relation[key]] = data[i][key];
      } else {
        temp[key] = data[i][key];
      }
    }
    result.push(temp);
  }
  return result;
};

/**
 * @description 封装或指定表格字段的显示状态
 * @param value 字段名
 * @param data 字段表
 * @returns {boolean|*} true or false
 */
export function fieldVisible(value, data) {
  let obj = data.find(item => item.title === value);
  return obj.IsVisible;
}

/**
 * @description 使用递归过滤出需要渲染在左侧菜单动态数据的列表 (需剔除 hide_menu === true 隐藏的菜单)
 * @param {Array} menuList 菜单列表
 * @returns {Array}
 * */
export function getShowStaticAndDynamicMenuList(menuList) {
  let newMenuList = JSON.parse(JSON.stringify(menuList));
  return newMenuList.filter((item) => {
    return item.isHide === false || item.meta?.isHide === false;
  });
}

/**
 * @description 使用递归找出所有面包屑存储到 pinia 中
 * @param {Array} menuList 菜单列表
 * @param {Array} parent 父级菜单
 * @param {Object} result 处理后的结果
 * @returns {Object}
 */
export const getAllBreadcrumbList = (menuList, parent = [], result = {}) => {
  for (const item of menuList) {
    result[item.path] = [...parent, item];
    if (item.children) getAllBreadcrumbList(item.children, result[item.path], result);
  }
  return result;
};

const mode = import.meta.env.VITE_ROUTER_MODE;

/**
 * @description 获取不同路由模式所对应的 url + params
 * @returns {String}
 */
export function getUrlWithParams() {
  const url = {
    hash: location.hash.substring(1),
    history: location.pathname + location.search
  };
  // @ts-ignore
  return url[mode];
}

/**
 * @description 获取浏览器默认语言
 * @returns {String}
 */
export function getBrowserLang() {
  // @ts-ignore
  let browserLang = navigator.language ? navigator.language : navigator.browserLanguage;
  let defaultBrowserLang = "";
  if (["cn", "zh", "zh-cn"].includes(browserLang.toLowerCase())) {
    defaultBrowserLang = "zh";
  } else {
    defaultBrowserLang = "en";
  }
  return defaultBrowserLang;
}

/**
 * @description 获取assets静态资源
 * @param url
 * @returns
 */
export const getAssets = (url) => {
  return new URL(`../assets/${url}`, import.meta.url).href;
};
